package com.qf.controller;

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @author sunyamei
 * @version V1.0
 * @Project springmvc_Demo
 * @Package com.qf.controller
 * @Description:
 * @Date 2022/7/13 14:52
 *一获取参数
 *  *  1)、获取单个参数  http://localhost:8080/user/findByName?name=tom
 *  *  2) 获取多个参数  name=tom&age=18
 *  *    可以一个参数一个参数获取：在处理请求方法中添加与请求参数同名的参数即可
 *  *    如果请求参数名与方法参数名不一致通过@RequestParam指定请求参数
 *  * 3)封装请求参数
 *  *    3.1pojo：
 *  *         在方法中加入一个pojo参数，添加请求参数同名参数即可
 *  *            pojo一定要有set方法，还要有无参构成
 *  *    3.2Map:
 *  *        在方法中加入map类型参数此时Map参数中的key是参数名value参数值
 *  *        一定要在map类型的参数前加@RequestParam注解
 *  *    3.3如果多个同名参数使用lIst或者数组进行封装
 *  *         1如果是集合  @RequestParam注解
 *  *         2方法参数名与请求参数名一样
 *  *  二、获取请求参数存在问题
 *  *     1post请求方式提交参数时，中文乱码问题（通过过滤器 使用Spring提供的过滤器）
 *  *        我们需要在web.xml文件中配置
 *  *         在web.xml中配置过滤器的拦截方式
 *  *         在web.xml中通过全局的初始化参数配置，告诉浏览器使用什么编码
 *  *       2.date类型转换问题
 *  *         2.1spring中已经内置了很多类型转换器，但我们可以根据自己需要，自定义转换器
 *  *              如：String转数字  String 转数组  String转date
 *  *             例如：将请求的yyyy-MM-dd String类型  转成 Date类型
 *  *  *                使用DateTimeFormat注解实现局部类型转换
 *  *  转发重定向：如果写redirect关键字，视图解析器不会添加前缀和后缀，要编写绝对路径
 *  *    响应模式
 *  *      请求域存储数据
 *  *     ModelMap  Model 可以直接new对象 ，也可以写到处理器的参数里面
 *  *     ModelAndView:模型和视图对象
 *  *                 可以手动new 可以写到处理的参数里面，可以在请求域中存储数据也可以指定视图页面
 *  *
 *
 *
 *
 *
 */
@Controller
@RequestMapping("/user")
@SessionAttributes(names = {"usernames","password"})
public class UserController {

    @RequestMapping("/findByName")
    public  String  findByName(@RequestParam(name ="username",required = false,defaultValue = "aa") String name,@RequestParam(required = false) Integer age,@DateTimeFormat(pattern = "yyyy-MM-dd") Data birthday) {
        System.out.println("name" + name);
        System.out.println("age" + age);
        System.out.println("birthday" + birthday);

        //返回界面
        return "success";
    }
        @PostMapping("/register")
        public String register(@RequestParam Map user){
            System.out.println("user = " + user);
            //返回界面
            return "success";
        }
        @GetMapping("/param01")
        public String param01(String [] args){
            System.out.println("args = " + Arrays.toString(args));
            //返回界面
            return "success";
        }

        @GetMapping("/param02")
        public String param02(@RequestParam List<Integer> ids){
            System.out.println("ids = " + ids);
            //返回界面
            return "success";
        }
        @GetMapping("/param03")
        public String param03(String name, ModelMap map, Model model){
//        model.addAttribute("","");
            map.put("username","tom");

            System.out.println("name = " + name);
            //返回界面 默认请求转发
//        return "success";
            //重定向
            return "redirect:/success.jsp";

        }
        @GetMapping("/param04")
        public ModelAndView param04(ModelAndView modelAndView){
            //添加数据到请求域Model
            modelAndView.addObject("username","admin");
            modelAndView.addObject("password","888");
            //View
            modelAndView.setViewName("redirect:/success.jsp");
            //重定向
            return modelAndView;

        }

    }



